P in 型 as ..
なので、↑の違いを理解しておけば、as単体で見れば区別して理解する必要はない
P in keyof T as ..の例
code:ts
type Getters<T> = {
[P in keyof T as get${Capitalize<string & P>}]: () => TP; };
interface Person {
name: string;
age: number;
location: string;
}
type LazyPerson = Getters<Person>;
// type LazyPerson = {
// getName: () => string;
// getAge: () => number;
// getLocation: () => string;
// }
P in K as ..の例
code:ts
type Handlers<Events extends string> = {
[E in Events as on${Capitalize<E>}]?: (event: E) => void;
};
type H = Handlers<'click' | 'hover'>;
// type H = {
// onClick?: (event: "click") => void;
// onHover?: (event: "hover") => void;
// }
一種なので別にリンクにする必要ないかもしれないが一応mrsekut.icon
code:ts
type OnlyIdKeys<K extends PropertyKey> = {
[P in K as P extends ${string}Id ? P : never]: true;
};
type A = OnlyIdKeys<'userId' | 'name' | 'postId'>;
// type A = {
// userId: true;
// postId: true;
// }